import pandas as pd
a=pd.read_csv('./分析/as.csv',encoding='gbk',dtype='str')   #定义类型确保没有小数点
#处理数据
b=a.drop_duplicates(subset=['名称'])      #对数据去重
test=b.dropna(how='any',subset=['上映时间'],inplace=False)     #对上映时间去空值
c_d=test.dropna(how='any',subset=['类型'],inplace=False)      #对类型去空值
c=c_d.drop(c_d[(c_d['上映时间']=='19524') | (c_d['上映时间']=='19530') | (c_d['上映时间']=='19630') |
(c_d['上映时间']=='19637') | (c_d['上映时间']=='19900') |(c_d['上映时间']=='19991') | (c_d['上映时间']=='19994') | (c_d['上映时间']=='20014') |(c_d['上映时间']=='20117')
| (c_d['上映时间']=='20165') | (c_d['上映时间']=='20196') | (c_d['上映时间'] == '2021')] .index  )

#构建评价分类模型的数据
bs_rc=c.sort_values(['上映时间'],ascending=True)
SVC_test=bs_rc['上映时间']
SVC_A=pd.DataFrame(SVC_test[-25000:].astype('int'))
SVC_A.columns=['time']
def get_wendu_type(x):
    if x["time"]%2==0:
        return 1
    else:
        return 0
# 注意需要设置axis ==1 ，这是series的index是columns
SVC_A.loc[:,"test"] = SVC_A.apply(get_wendu_type,axis=1)     #偶数为1
#svc_a=SVC_A.drop_duplicates(subset=['time'])              #去重

#构建评价分类模型与预测结果
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

SVC_data = SVC_A['time']
SVC_target = SVC_A['test']
## 将数据划分为训练集测试集
SVC_data_train,SVC_data_test, \
SVC_target_train,SVC_target_test = \
train_test_split(np.array(SVC_data),np.array(SVC_target),
      test_size = 0.25,random_state = True)
## 标准差标准化

#stdScaler=1.0*(SVC_data_train-SVC_data_train.mean())/SVC_data_train.std()
stdScaler = StandardScaler().fit(SVC_data_train.reshape(-1, 1))
cancer_trainStd = pd.DataFrame(stdScaler.transform(SVC_data_train.reshape(-1, 1)))
cancer_testStd = pd.DataFrame(stdScaler.transform(SVC_data_test.reshape(-1, 1)))
print(type(stdScaler))
## 建立SVM模型
svm = SVC().fit(cancer_trainStd,SVC_target_train)
print('建立的SVM模型为：\n',svm)


## 预测训练集结果
cancer_target_pred = svm.predict(cancer_testStd)
print('预测前20个结果为：\n',cancer_target_pred[:20])
true = np.sum(cancer_target_pred == SVC_target_test )
print('预测对的结果数目为：', true)
print('预测错的的结果数目为：', SVC_target_test.shape[0]-true)
print('预测结果准确率为：', true/SVC_target_test.shape[0])

from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
## 求出ROC曲线的x轴和y轴
fpr, tpr, thresholds = \
roc_curve(SVC_target_test,cancer_target_pred)
plt.figure(figsize=(10,6))
plt.xlim(0,1) ##设定x轴的范围
plt.ylim(0.0,1.1) ## 设定y轴的范围
plt.xlabel('False Postive Rate')
plt.ylabel('True Postive Rate')
plt.plot(fpr,tpr,linewidth=2, linestyle="-",color='red')
plt.show()